// #pragma once
#include <widget.h>
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    socket = new QTcpSocket;   // 创建 scoket 对象
    only_one_chat = 0;
    server_open = 1;
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_cancel_pushButton_clicked()
{
    this->close();
}

void Widget::on_connect_pushButton_clicked()
{
    // 获取 IP 地址和端口号
    QString ip = ui->ip_lineEdit->text();
    QString port = ui->port_lineEdit->text();

    // 连接服务器
    socket->connectToHost(QHostAddress(ip), port.toShort());

    // 测试服务器连接状态
    connect(socket, &QTcpSocket::connected, [this]()
            {
                ++only_one_chat;
                if (only_one_chat == 1)
                {
                    QMessageBox::information(this, "连接成功提示", "服务器链接成功");

                    // 关闭/隐藏当前窗口
                    this->close();      // hide() 函数隐藏当前窗口，局部变量还在，关闭会释放局部变量
                    // Chat* chat;      // 自己的类（在 chat.h 中），注意局部变量可能会释放，所以这里必须搞到堆区去
                    chat = new Chat(socket);
                    qDebug() << "链接端口号：" << chat->get_port();
                    chat->get_port() = ui->port_lineEdit->text();
                    chat->show();
                    // socket->flush();
                }
                else
                {
                    qDebug() << "连接按钮点击次数：" << only_one_chat;
                }
            });
    // connect(socket, &QTcpSocket::connected, this, &Widget::tcp_connected);
    connect(socket, &QTcpSocket::disconnected, [this]()
            {
                --only_one_chat;
                if (only_one_chat <= 1)
                {
                    QMessageBox::warning(this, "警告", "与服务器断开连接");
                    chat->connect_to_server = 0;
                }
                else if (server_open)
                {
                    // QMessageBox::warning(this, "警告", "服务器断开与这里的连接");
                    // server_open = 0;
                }
            });
    QEventLoop loop;
    QTimer::singleShot(100, &loop, SLOT(quit()));
    loop.exec(); // 休眠 0.1 秒
    if (!only_one_chat)
    {
        QMessageBox::warning(this, "警告", "连接失败");
    }
}

// void Widget::tcp_connected()
// {
//     QMessageBox::information(this, "连接成功提示", "服务器链接成功");

//     // 关闭/隐藏当前窗口
//     this->close();   // hide() 函数隐藏当前窗口，局部变量还在，关闭会释放局部变量
//     // Chat* chat;      // 自己的类（在 chat.h 中），注意局部变量可能会释放，所以这里必须搞到堆区去
//     chat = new Chat(socket);
//     qDebug() << "链接端口号：" << chat->get_port();
//     chat->get_port() = ui->port_lineEdit->text();
//     chat->show();
// }
